//整数转换。编写一个函数，确定需要改变几个位才能将整数 A 转成整数 B。 
//
// 示例 1： 
//
// 
// 输入：A = 29 （或者 0b11101）, B = 15（或者 0b01111）
// 输出：2
// 
//
// 示例 2： 
//
// 
// 输入：A = 1，B = 2
// 输出：2
// 
//
// 提示: 
//
// 
// A，B范围在[-2147483648, 2147483647]之间 
// 
//
// Related Topics 位运算 👍 63 👎 0


package LeetCode.editor.cn;

/**
 * @author ldltd
 * @date 2025-07-17 00:10:19
 * @description 面试题 05.06.整数转换
 */
public class ConvertIntegerLcci{
	 public static void main(String[] args) {
	 	 //测试代码
	 	 ConvertIntegerLcci fun=new ConvertIntegerLcci();
	 	 Solution solution = fun.new Solution();
		 System.out.println();
	 }
	 
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int convertInteger1(int A, int B) {
		// 计算A和B的异或值
		int xor = A ^ B;
		// 统计异或值中1的个数
		int count = 0;
		while (xor != 0) {
			count += xor & 1; // 检查最低位是否为1
			//-1 >> 1 仍然是 -1 所以要用无符号右移
			xor >>>= 1; // 右移一位
		}
		return count; // 返回需要改变的位数
    }
	public int convertInteger(int A, int B) {
		int xor = A ^ B;
		int count = 0;
		while (xor != 0) {
			xor &= xor - 1; // 消除最低位的1
			count++;
		}
		return count;
	}
}
//leetcode submit region end(Prohibit modification and deletion)

}
